// 立即执行函数表达式 (IIFE) 确保重写逻辑只执行一次
;(function () {
  // 白名单 URL
  const allowedUrls = [window.location.hostname, 'sellercentral.amazon.com']

  // 标志变量，确保只重写一次
  let isWindowOpenOverridden = false

  // 安全的 window.open 封装
  function safeWindowOpen() {
    if (isWindowOpenOverridden) return
    isWindowOpenOverridden = true

    // 保存原始的 window.open 方法
    const originalOpen = window.open

    // 重写 window.open 方法
    window.open = function (url?: string | URL, target?: string, features?: string): WindowProxy | null {
      let urlStr: string = url ? url.toString() : ''

      if (urlStr === '') {
        // 调用原始的 window.open 方法打开窗口
        return originalOpen.call(window, url, target, features)
      }

      if (!urlStr.startsWith('http://') && !urlStr.startsWith('https://')) {
        urlStr = `${window.location.origin}${urlStr}`
      }
      // 提取域名部分
      let domain: string = ''
      try {
        const curUrl = new URL(urlStr)
        // 遵循同源策略，检查是否为同源 URL
        const currentOrigin = window.location.origin
        const targetOrigin = curUrl.origin
        domain = curUrl.hostname
        if (targetOrigin !== currentOrigin) {
          console.warn('跨源打开窗口，可能存在安全风险')
        }
      } catch (e) {
        console.warn(`Invalid URL: ${urlStr}`)
      }

      // 验证 URL 是否在白名单中
      if (domain && !allowedUrls.includes(domain)) {
        console.error(`Attempt to open untrusted URL: ${urlStr}`)
        return null
      }

      // 限制访问权限，设置 noopener 和 noreferrer 属性
      // 防止新窗口通过 opener 访问原始窗口的敏感信息
      if (target === '_blank') {
        features = features ? `${features},noopener,noreferrer` : 'noopener,noreferrer'
      }

      // 调用原始的 window.open 方法打开窗口
      return originalOpen.call(window, url, target, features)
    }
  }

  // 调用安全的 window.open 封装函数
  safeWindowOpen()

  // 冻结 window 对象以防止进一步修改
  Object.freeze(window.open)
})()

// 导出一个空函数，防止外部直接调用
export function rewriteOpen() {
  console.log('rewriteOpen')
}
